Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafael Lopes da Silva

Exibição de uma consulta e comparação entre valores

Recommended Posts

Boa tarde galera!

Estou penando pra resolver uma situação ...rsrs ... já pesquisei ... Já xinguei ...rsrs ... já fui no xvideos pra relaxar ... rsrsr ... e nada faz esse script rodar do jeito que quero .... enfim HELP ME PLEASE ...rsrs

É o seguinte: Quero jogar uma data, e ela me devolva os horários cadastrados nesta tabela:

Exemplo:

se colocar a data 17/01/2017 e clico em pesquisar .... se na tabela estiver 3 horários já cadastrados nesta data: 9:00, 14:00 e 17:00.

gostaria que a saída no navegador fosse assim:

Disponível: 8:00

Reservado: 9:00

Disponível: 10:00

....

Reservado: 14:00

Disponível: 15:00

.....

Reservado: 17:00

...

Disponível: 21:00

O problema que ela está exibindo n vezes de acordo com a quantidade de horários cadastrados na tabela ... no caso nesse exemplo como tem 3 horários cadastrado ela vai triplicar.

Disponível: 8:00

Disponível: 8:00

Disponível: 8:00

Disponível:: 9:00

Disponível:: 9:00

Reservado: 9:00

Disponível: 10:00

Disponível: 10:00

Disponível: 10:00

vou colocar o código abaixo:

Classe AgendaDao
<?php
include_once('agenda.php');
include_once('agendaInterface.php');
class AgendaDao implements AgendaInterface
{
// outros métodos omitidos
public function LocalizarAgenda(Agenda $objetoAgenda)
{
try
{
$sql = 'SELECT hora_minuto FROM agenda_paciente
WHERE data_consulta = STR_TO_DATE(:data_consulta,"%d/%m/%Y")';
$stmt = Connection::prepare($sql);
$stmt -> bindValue(':data_consulta',$objetoAgenda->getData(),PDO::PARAM_STR);
$stmt -> execute();
return $stmt -> fetchAll(PDO::FETCH_ASSOC);
} catch (Exception $e)
{
print "Ocorreu um erro ao tentar executar esta ação, tente mais tarde." . " <br>Erro na Linha: " . $e -> getLine() . "<br> Código do Erro: ". $e -> getCode() . "<br>Arquivo:". $e ->
getFile(). "<br> MENSAGEM:". $e -> getMessage();
}
}
}
?>

-----

<?php

require_once($_SERVER['DOCUMENT_ROOT']."/natercia/classes/agenda paciente/agendaController.php");
/* Listar os horarios disponíveis a partir de uma data */
try {
# Ao clicar no botão
if (isset($_GET['btnAgenda']))
{
# Verifico se a data foi preenchida
if($_GET['dataConsulta'] <>'')
{
#Horários de atendimento
$horariosConsulta = ['8:00','9:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00'];
# Recebo a data do usuário
$data = $_GET['dataConsulta'];
#instancio a classe Agenda
$objetoAgenda = new Agenda();
#instancio a classe AgendaController
$objetoAgendaController = new AgendaController();
#Passo a variavel $data para o método SETDATA da classe agenda
$objetoAgenda -> setData($data);
#Passo a variável $objeto para o método LocalizarAgenda da classe agendaController
$linhas = $objetoAgendaController -> LocalizarAgenda($objetoAgenda);
# Percorro todo o array da variável $horariosConsulta
foreach ($horariosConsulta as $valor)
{
foreach ($linhas as $valor2)
{
if($valor == $valor2['hora_minuto'])
{
echo "<pre>";
echo "Reservado: $valor";
echo "</pre>";
}
else
{
echo "<pre>";
echo "Disponivel: $valor";
echo "</pre>";
}
}
}
}
else
{
echo "<font color=red>ATENÇÃO - Escolha uma DATA para a busca!</font>";
}
}
} catch (Exception $e) {
echo "Erro!".$e->getMessage()."Linha: ". getLine();
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafael, posta um var_dump($linhas) para podermos ajudar melhor.

Uma dica, o ideal seria exibir para o usuário apenas os horários que estão disponíveis, dando lhe uma melhor experiencia, e de quebra daria uma enxugada no seu código, não precisando mais fazer o loop dentro do loop, deixando o código também um pouco mais legível e fácil de mexer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Edcesar!

Desculpe-me a demora em reponder seu post.

Hoje que começarei a mecher nessa encrenca ...rsrs

você tem razão, é melhor exibir apenas os horários disponíveis.

Vou tentar implementar está idéia, caso não consiga ... te aviso.

Mas vlw pela ajuda! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafael, posta um var_dump($linhas) para podermos ajudar melhor.

Uma dica, o ideal seria exibir para o usuário apenas os horários que estão disponíveis, dando lhe uma melhor experiencia, e de quebra daria uma enxugada no seu código, não precisando mais fazer o loop dentro do loop, deixando o código também um pouco mais legível e fácil de mexer.

Cara ainda estou agarrado neste problema!

Tentei implementar aquela sua sugestão de exibir somente os horários disponíveis mais não me veio uma inspiração ... rsrs

minha tabela se chama agenda - Campos id|fk_id_paciente|data_consulta|horario|marcado

Exemplo de um registro cadastrado: id = 1 | fk_id_paciente=2 | data_consuta 2017-01-01 | horario '10:00' | marcado 1

obs: O campo marcado recebe 1 para o horario reservado e 0 para horário Disponível.

segue a saída do var_dump($linhas):

array(3) {

[0]=>

array(2) {

["horario"]=>

string(5) "09:00"

["marcado"]=>

string(1) "1"

}

[1]=>

array(2) {

["horario"]=>

string(5) "10:00"

["marcado"]=>

string(1) "1"

}

[2]=>

array(2) {

["horario"]=>

string(5) "11:00"

["marcado"]=>

string(1) "1"

}}

}

Observa que a query está devolvendo certinho os horários a partir de uma data ... o negócio é conseguir comparar estes valores da variavel $linhas com os valores da variável $horariosConsulta.

Mas se você tiver um script que faça isso ... favor me passe ... :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

negócio é conseguir comparar estes valores da variavel $linhas com os valores da variável $horariosConsulta.

Ué bora fazer.

Pra facilitar começa a utilizar o botãozinho 'código' , veja a minha assinatura caso tenha duvidas amiguinho :P

Formatei o seu var_dump() para um formato humanamente legível.

array(3) {
	[0]=>
	array(2) {
		["horario"]=> string(5) "09:00"
		["marcado"]=> string(1) "1"
	}
	
	[1]=> array(2) {
		["horario"]=> string(5) "10:00"
		["marcado"]=> string(1) "1"
	}
	
	[2]=>
		array(2) {
		["horario"]=> string(5) "11:00"
		["marcado"]=> string(1) "1"
	}
} 

Bem melhor pra leitura neh?! hehe

A ideia é trazer todos os horários cruzando com esse carinha?

$horariosConsulta = ['8:00','9:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00'];

Ai que fica o 'desafio'

Temos um array simples para comparar com o Array de arrays.

durante o seu loop você tem um array simples.

Veja:

# Percorro todo o array da variável $horariosConsulta
foreach ($horariosConsulta as $valor) {
	foreach ($linhas as  $valor2){
		if($valor == $valor2['hora_minuto']){
			echo "<pre>";
				echo "Reservado: $valor";
			echo "</pre>";
		} else {
			echo "<pre>";
				echo "Disponivel: $valor";
			echo "</pre>";
		}
	} 
}

Nesse momento aqui:

foreach ($horariosConsulta as $valor) { 

Você tem o array (associativo) simples.....

Não entendeu?

Da um var_dump($valor) q tu entende hehe.

Vai sair algo assim:

array(
	'hora_minuto' => '12:00'	
)

Então basicamente comparar agora ficou bem mais facil.

Pois é só percorrer todos os $horariosConsulta.

Mas se você tiver um script que faça isso ... favor me passe ...

Tenho esse:

http://www.php.net/in_array

<?php
$os = array("Mac", "NT", "Irix", "Linux"); 
if (in_array("Irix", $os)) { 
    echo "Tem Irix";
}
if (in_array("mac", $os)) { 
    echo "Tem mac";
}

Serve?!

haha espero que tenha entendido, ou tirado mais duvidas do que gerado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amiguinho de profissão! .. :P

Primeiramente agradeço a sua boa vontade em resolver meu problema e me ensinar a usar o ícone código <> ...rsrsr

... prometo que vou utilizá-lo agora ...rsrsr

Tentei adaptar o seu exemplo mais infelizmente continua dando o mesmo erro .... :( , logo vou por o script abaixo, afim que você possa me dar uma ajuda ... Um abraço :D

<?php
/* Listar os horarios disponíveis a partir de uma data */

	try {

		if (isset($_GET['btnAgenda']))
		{

			if($_GET['dataConsulta'] <>'')
			{
				#Horários de atendimento
				$horariosConsulta = ['8:00','9:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00'];

				# Recebo dado do campo DDD
				$data = $_GET['dataConsulta'];

				#instancio a classe Agenda
				$objetoAgenda = new Agenda();
				#instancio a classe AgendaController
				$objetoAgendaController = new AgendaController();
				#Passo a variavel $data para o método SETDATA da classe agenda
				$objetoAgenda -> setData($data);
				#Passo a  variável $objeto para o método LocalizarAgenda da classe agendaController
				$linhas = $objetoAgendaController -> LocalizarAgenda($objetoAgenda);
				
				# Percorro todo o array da variável $horariosConsulta
				foreach ($horariosConsulta as $valor)
				{
					foreach ($linhas as  $valor2)
					{
						if(in_array($valor2['horario'], $horariosConsulta))
						{
							echo "<pre>";
							echo "Reservado: $valor2[horario]";
							echo "</pre>";
						} else 
						{
							echo "<pre>";
							echo "Disponivel: $valor";
							echo "</pre>";
						}
					} 
				}	
			}
			else
			{
				echo "<font color=red>ATENÇÃO - Escolha uma DATA para a busca!</font>";	
			}
		}


	} catch (Exception $e) {
		echo "Erro!".$e->getMessage()."Linha: ". getLine();
	}

?>

No navegador aparece a seguinte saída:

Disponivel: 8:00 Reservado: 10:00Reservado: 11:00Disponivel: 9:00Reservado: 10:00Reservado: 11:00Disponivel: 10:00Reservado: 10:00Reservado: 11:00Disponivel: 11:00Reservado: 10:00Reservado: 11:00Disponivel: 12:00Reservado: 10:00Reservado: 11:00Disponivel: 13:00Reservado: 10:00Reservado: 11:00Disponivel: 14:00Reservado: 10:00Reservado: 11:00Disponivel: 15:00Reservado: 10:00Reservado: 11:00Disponivel: 16:00Reservado: 10:00Reservado: 11:00Disponivel: 17:00Reservado: 10:00Reservado: 11:00Disponivel: 18:00Reservado: 10:00Reservado: 11:00Disponivel: 19:00Reservado: 10:00Reservado: 11:00Disponivel: 20:00Reservado: 10:00Reservado: 11:00Disponivel: 21:00Reservado: 10:00Reservado: 11:00

Sendo que na data exemplo que cadastrei 01-01-2017 - tem os seguintes horários cadastrados 9:00, 10:00, 11:00

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde galera! 

Consegui resolver essa p**** desse pepino depois de muitos stress ...  pesquisa ... ajuda dos amigos ai do fórum ... e claro um pouco de Xvideos pra relaxar ... rsrsr

Enfim segue a sequencia da resolução do problema:

1º criei 2 tabelas agenda e horario:

campos da tabela agenda -->  id | fk_id_paciente | data_consulta| fk_id_horario 

campos da tabela horario --> id | hora_minuto 

2º Query na classe

public function LocalizarAgenda(Agenda $objetoAgenda)
		{
			try 
			{
				
				$sql = 'SELECT h.hora_minuto FROM  agenda as a

				RIGHT JOIN horario as h
                on h.id = a.fk_id_horario AND a.data_consulta = STR_TO_DATE(:data_consulta,"%d/%m/%Y")
				WHERE a.fk_id_horario is null';

				$stmt = Connection::prepare($sql);

				$stmt -> bindValue(':data_consulta',$objetoAgenda->getData(),PDO::PARAM_STR);

				$stmt -> execute();

				return $stmt -> fetchAll(PDO::FETCH_ASSOC);
			} catch (Exception $e) 
			{
				print "Ocorreu um erro ao tentar executar esta ação, tente mais tarde." . " <br>Erro na Linha: " . $e -> getLine() . "<br> Código do Erro: ". $e -> getCode() . "<br>Arquivo:". $e ->
				getFile(). "<br> MENSAGEM:". $e -> getMessage();
			}
		}

O pulo do gato está na Query que me lista todos os horários disponíveis a partir de uma data ... como tive essa inspiração ... rsrsr  ... neste link: http://www.devmedia.com.br/sql-join-entenda-como-funciona-o-retorno-dos-dados/31006?utm_content=bufferc4881&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer

O conceito que utilizei foi : Right Excluding Join ... foi esse cara que salvou minha pele .... rsrsr

3º passo agora ficou very easy ... rsrsr

 

try {

		if (isset($_GET['btnAgenda']))
		{

			if($_GET['dataConsulta'] <>'')
			{


				# Recebo dado do campo DDD
				$data = $_GET['dataConsulta'];

				#instancio a classe Agenda
				$objetoAgenda = new Agenda();
				#instancio a classe AgendaController
				$objetoAgendaController = new AgendaController();
				#Passo a variavel $data para o método SETDATA da classe agenda
				$objetoAgenda -> setData($data);
				#Passo a  variável $objeto para o método LocalizarAgenda da classe agendaController
				$linhas = $objetoAgendaController -> LocalizarAgenda($objetoAgenda);
		
				echo "<span>Horarios disponíveis</span>";
				# Percorro todo o array da variável $horariosConsulta
				foreach ($linhas as $valor)
				{
					echo "<pre>";
					echo "Disponivel: $valor[hora_minuto]";
					echo "</pre>"; 
				}	
			}
			else
			{
				echo "<font color=red>ATENÇÃO - Escolha uma DATA para a busca!</font>";	
			}
		}


	} catch (Exception $e) {
		echo "Erro!".$e->getMessage()."Linha: ". getLine();
	}

E finalizou !!!!!!!!!!!!! pqp .... rsrsrs 

Espero ter ajudado ... Um abraço ... e uma frase motivacional: " ... você só perde quando você desiste " ... profundo ... rsrsr Um abraço:tounge_wink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.